package yangsw87.swing;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;

import java.awt.Dimension;

import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.LayoutStyle.ComponentPlacement;

import yangsw87.dao.ZipcodeDAO;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;

public class ZipcodeSub extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private JTextField dong;
	private JTextField etcAddrA;
	private JComboBox baseAddr = new JComboBox();

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			ZipcodeSub dialog = new ZipcodeSub(null,null,null,null); // 수정!
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 */
	//public ZipcodeSub() {
	public ZipcodeSub(final JTextField zip1, final JTextField zip2, final JTextField addr, final JTextField etcAddr) { // 수정!
		setTitle(":: 우편번호 검색 ::");
		setBounds(100, 100, 450, 300);
		setLocationRelativeTo(null);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new BorderLayout(0, 0));
		{
			JPanel panel = new JPanel();
			panel.setPreferredSize(new Dimension(10, 50));
			contentPanel.add(panel, BorderLayout.NORTH);
			JLabel lblNewLabel = new JLabel("<html><pre>동,읍,면의 이름을 입력하신 후 '우편번호 찾기'를 클릭\r\n          (예 : 서초동, 우포읍, 외서면)\r\n</pre></html>");
			lblNewLabel.setFont(new Font("맑은 고딕", Font.BOLD, 14));
			GroupLayout gl_panel = new GroupLayout(panel);
			gl_panel.setHorizontalGroup(
				gl_panel.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panel.createSequentialGroup()
						.addContainerGap()
						.addComponent(lblNewLabel)
						.addContainerGap(17, Short.MAX_VALUE))
			);
			gl_panel.setVerticalGroup(
				gl_panel.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panel.createSequentialGroup()
						.addComponent(lblNewLabel)
						.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
			);
			panel.setLayout(gl_panel);
		}
		{
			JPanel panel = new JPanel();
			panel.setPreferredSize(new Dimension(10, 165));
			contentPanel.add(panel, BorderLayout.SOUTH);
			JLabel txtDong = new JLabel("동 이름");
			txtDong.setFont(new Font("맑은 고딕", Font.BOLD, 14));
			dong = new JTextField();
			dong.setColumns(10);
			JButton findBtn = new JButton("주소검색");
			findBtn.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					
					// 동을 입력하지 않고 검색버튼을 누른 경우
					// 경고창 표시
					if(dong.getText().equals("")){
						JOptionPane.showMessageDialog(null, "동이름을 입력");
						return;
					}
					
//					String[] addr = new String[] {"123-456 서울시 광진구 자양동 789 번지",
//							"987-654 부산시 남구 문현3동 12-0 번지",
//							"456-123 인천시 연수구 선학동 987 번지" };    // p583쪽 참고
							// 테스트 코드
					
					// zipcode 테이블에서 동으로 검색한 결과를
					// ArrayList 객체에 담아주면
					// JComboBox 객체에 목록으로 추가할 수 있도록
					// String[] 배열로 다시 작성
					ArrayList<String> zip = ZipcodeDAO.findzip(dong.getText());
					
					// ArrayList에 담긴 내용을 배열로 옮겨 담음
					String[] addr = new String[zip.size()];
					for( int i= 0; i<zip.size(); ++i){
						addr[i] = zip.get(i);
					}
					
					// baseAddr = new JComboBox(addr);
					// baseAddr.repaint(); // 불가!
					// 콤보박스에 목록을 변경하려면
					// 기존 목록을 모두 지우고 난 후
					// addItem 메서드로 새로 추가해야 함
					baseAddr.removeAllItems(); // 기존 목록 제거
					for(String l : addr) // addr에 있는 배열 Item을 하나씩 가져온다.
						baseAddr.addItem(l); // 목록 새로 추가 // 하나씩 콤보박스에 추가한다.
					
				}
			});
			
			
			
			etcAddrA = new JTextField();
			etcAddrA.setColumns(10);
			
			JButton sendBtn = new JButton("선택후닫기");
			sendBtn.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					// 주소검색 후 적절한 우편번호 및 주소를 선택하고 
					// 나머지 주소를 입력한 후 ZipcodeMain의
					// zip1, zip2, addr, etcaddr에
					// 자동으로 입력하고 현재창 닫음
					String tmp1 = (String)baseAddr.getSelectedItem(); // 문자형태로 값을 받아 온다.
					// String zip1[] = tmp1.split(" "); // 공백을 기준으로 값을 자른다.
					
					// tmp[0] = 123-456
					// tmp[1] = 서울시
					// tmp[2] = 광진구
					// tmp[3] = 자양동
					// tmp[4] = 789
					// tmp[5] = 번지
					
					// String zipA = tmp1.split(" ")[0].split("-")[0];
					// String zipB = tmp1.split(" ")[0].split("-")[1]; // 우편번호에 -가 있을 때!
					
					// 123456 : substring(0,3) : 0~2 -> 123
					// 123456 : substring(3,6) : 3~5 -> 456
					String zipA = tmp1.split(" ")[0].substring(0, 3);
					String zipB = tmp1.split(" ")[0].substring(3, 6); // 우편번호에 -가 없을 때!
					
					String addrA = tmp1.substring(7);
					
					// ZipcodeMain의 zip1, zip2, addr, etcaddr에
					// 사용자가 선택하고 입력한 값 전달
					zip1.setText(zipA);
					zip2.setText(zipB);
					addr.setText(addrA);
					etcAddr.setText(etcAddrA.getText());
					
					dispose();
					
					
				}
			});
			
			JButton notBtn = new JButton("취소");
			GroupLayout gl_panel = new GroupLayout(panel);
			gl_panel.setHorizontalGroup(
				gl_panel.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panel.createSequentialGroup()
						.addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
							.addGroup(gl_panel.createSequentialGroup()
								.addGap(45)
								.addGroup(gl_panel.createParallelGroup(Alignment.TRAILING, false)
									.addComponent(etcAddrA, Alignment.LEADING)
									.addComponent(baseAddr, Alignment.LEADING, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
									.addGroup(Alignment.LEADING, gl_panel.createSequentialGroup()
										.addComponent(txtDong)
										.addGap(18)
										.addComponent(dong, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
										.addGap(30)
										.addComponent(findBtn))))
							.addGroup(gl_panel.createSequentialGroup()
								.addGap(81)
								.addComponent(sendBtn)
								.addGap(32)
								.addComponent(notBtn, GroupLayout.PREFERRED_SIZE, 92, GroupLayout.PREFERRED_SIZE)))
						.addContainerGap(78, Short.MAX_VALUE))
			);
			gl_panel.setVerticalGroup(
				gl_panel.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panel.createSequentialGroup()
						.addContainerGap()
						.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
							.addComponent(txtDong)
							.addComponent(dong, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addComponent(findBtn))
						.addPreferredGap(ComponentPlacement.UNRELATED)
						.addComponent(baseAddr, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addPreferredGap(ComponentPlacement.UNRELATED)
						.addComponent(etcAddrA, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addGap(18)
						.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
							.addComponent(sendBtn)
							.addComponent(notBtn))
						.addContainerGap(29, Short.MAX_VALUE))
			);
			panel.setLayout(gl_panel);
		}
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			{
				JButton okButton = new JButton("OK");
				okButton.setActionCommand("OK");
				buttonPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				JButton cancelButton = new JButton("Cancel");
				cancelButton.setActionCommand("Cancel");
				buttonPane.add(cancelButton);
			}
		}
	}
}
